home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / demo / mag / trash3_2.lha / fuentes / FuentesFXC2P.lha / FXC2P.Conv_16Col_Cache < prev    next >
Text File  |  1992-09-02  |  8KB  |  351 lines

  1. ; En A5 metemos el inicio de donde queremos convertir en PVC
  2. ; En A6 metemos el inicio de donde queremos pintar en PFP
  3. ; Al final de PlanoX cambiar 10240 y similares para ajustar tamaño
  4. ; En d0 y d1 van Ancho (en LONGS) y Alto (PIXELS(BITS)) 
  5.  
  6. ************************************
  7. **** Plano 1 ***********************
  8. ************************************
  9. C2P_Conversion
  10.     mulu    d1,d0
  11.     subq    #1,d0
  12. .loop
  13.     move.w    d0,-(sp)
  14.     Moveq    #-1,D5        ;Mascara para Bytes Chunky (Plano 1)
  15.  
  16. ;    move.l    (a5)+,a0    ;Long 1 chunky (pixels  0 -  3)
  17. ;    move.l    (a5)+,a1    ;Long 2 chunky (pixels  4 -  7)
  18. ;    move.l    (a5)+,a2    ;Long 3 chunky (pixels  8 - 11)
  19. ;    move.l    (a5)+,a3    ;Long 4 chunky (pixels 12 - 15)
  20. ;    move.l    (a5)+,a4    ;Long 5 chunky (pixels 16 - 19)
  21. ;    move.l    (a5)+,d4    ;Long 6 chunky (pixels 20 - 23)
  22. ;    move.l    (a5)+,d6    ;Long 7 chunky (pixels 24 - 27)
  23. ;    move.l    (a5)+,d7    ;Long 8 chunky (pixels 28 - 31)
  24.  
  25.     movem.l (a5)+,a0-a4/d4-d7
  26.  
  27.     move.l    a0,d0        
  28.     move.l    a1,d2
  29.     lsl.l    #4,d2
  30.     or.l    d2,d0
  31.     and.l    d5,d0
  32.  
  33. ;    00004321000043210000432100004321
  34. ;    43210000432100004321000043210000
  35. ;    43214321432143214321432143214321
  36. ;    00010001000100010001000100010001 -> d0
  37. ;       4   0   5   1   6   2   7   3
  38.  
  39.     move.l    a2,d1
  40.     move.l    a3,d2
  41.     lsl.l    #4,d2
  42.     or.l    d2,d1
  43.     and.l    d5,d1
  44.  
  45. ;    00004321000043210000432100004321
  46. ;    43210000432100004321000043210000
  47. ;    43214321432143214321432143214321
  48. ;    00010001000100010001000100010001 -> d1
  49. ;      12   8  13   9  14  10  15  11
  50.  
  51.     lsl.l    #1,d1
  52.     or.l    d1,d0
  53.  
  54. ;    00110011001100110011001100110011 -> d0
  55.  
  56.     move.l    a4,d1
  57.     move.l    d4,d2
  58.     lsl.l    #4,d2
  59.     or.l    d2,d1
  60.     and.l    d5,d1
  61.  
  62. ;    00004321000043210000432100004321
  63. ;    43210000432100004321000043210000
  64. ;    43214321432143214321432143214321
  65. ;    00010001000100010001000100010001 -> d1
  66. ;      20  16  21  17  22  18  23  19
  67.  
  68.     move.l    a6,d3
  69.     move.l    a7,d2
  70.     lsl.l    #4,d2
  71.     or.l    d2,d3
  72.     and.l    d5,d3
  73.  
  74. ;    00004321000043210000432100004321
  75. ;    43210000432100004321000043210000
  76. ;    43214321432143214321432143214321
  77. ;    00010001000100010001000100010001 -> d3
  78. ;      28  24  29  25  30  26  31  27
  79.  
  80.     lsl.l    #1,d3
  81.     or.l    d3,d1
  82.  
  83. ;    00110011001100110011001100110011 -> d1
  84.  
  85.     lsl.l    #4,d1
  86.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  87.  
  88. ;    11111111111111111111111111111111 -> d0
  89.  
  90.     move.l    d0,(a6)            ;Pintamos 32 pixels de golpe en el Plano 1
  91.  
  92.  
  93. ; Scrambled X Data:
  94.  
  95. ; (03,11,19,27,07,15,23,31,02,10,18,26,06,14,22,30)    (0-15)
  96. ; (01,09,17,25,05,13,21,29,00,08,16,24,04,12,20,28)     (16-31)
  97.  
  98.  
  99. ************************************
  100. **** Plano 2 ***********************
  101. ************************************
  102.  
  103.     lsl.l    #1,d5            ;Mascara para el plano 2
  104.  
  105.     move.l    a0,d0
  106.     move.l    a1,d2
  107.     lsl.l    #4,d2
  108.     or.l    d2,d0
  109.     and.l    d5,d0
  110.     lsr.l    #1,d0
  111.  
  112. ;    00004321000043210000432100004321
  113. ;    43210000432100004321000043210000
  114. ;    43214321432143214321432143214321
  115. ;    00010001000100010001000100010001 -> d0
  116. ;       4   0   5   1   6   2   7   3
  117.  
  118.     move.l    a2,d1
  119.     move.l    a3,d2
  120.     lsl.l    #4,d2
  121.     or.l    d2,d1
  122.     and.l    d5,d1
  123.  
  124. ;    00004321000043210000432100004321
  125. ;    43210000432100004321000043210000
  126. ;    43214321432143214321432143214321
  127. ;    00100010001000100010001000100010 -> d1
  128. ;      12   8  13   9  14  10  15  11
  129.  
  130.     or.l    d1,d0
  131.  
  132. ;    00110011001100110011001100110011 -> d0
  133.  
  134.     move.l    a4,d1
  135.     move.l    d4,d2
  136.     lsl.l    #4,d2
  137.     or.l    d2,d1
  138.     and.l    d5,d1
  139.     lsr.l    #1,d1
  140.  
  141. ;    00004321000043210000432100004321
  142. ;    43210000432100004321000043210000
  143. ;    43214321432143214321432143214321
  144. ;    00010001000100010001000100010001 -> d1
  145. ;      20  16  21  17  22  18  23  19
  146.  
  147.     move.l    a6,d3
  148.     move.l    a7,d2
  149.     lsl.l    #4,d2
  150.     or.l    d2,d3
  151.     and.l    d5,d3
  152.  
  153. ;    00004321000043210000432100004321
  154. ;    43210000432100004321000043210000
  155. ;    43214321432143214321432143214321
  156. ;    00100010001000100010001000100010 -> d3
  157. ;      28  24  29  25  30  26  31  27
  158.  
  159.     or.l    d3,d1
  160.  
  161. ;    00110011001100110011001100110011 -> d1
  162.  
  163.     lsl.l    #4,d1
  164.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  165.  
  166. ;    11111111111111111111111111111111 -> d0
  167.  
  168. ;    lea    10240(a6),a6
  169.     move.l    d0,10240(a6)            ;Pintamos 32 pixels de golpe en el Plano 2
  170.  
  171. ************************************
  172. **** Plano 3 ***********************
  173. ************************************
  174.  
  175.     lsl.l    #1,d5            ;Mascara para el plano 3
  176.  
  177.     move.l    a0,d0
  178.     move.l    a1,d2
  179.     lsl.l    #4,d2
  180.     or.l    d2,d0
  181.     and.l    d5,d0
  182.     lsr.l    #1,d0
  183.  
  184. ;    00004321000043210000432100004321
  185. ;    43210000432100004321000043210000
  186. ;    43214321432143214321432143214321
  187. ;    00010001000100010001000100010001 -> d0
  188. ;       4   0   5   1   6   2   7   3
  189.  
  190.     move.l    a2,d1
  191.     move.l    a3,d2
  192.     lsl.l    #4,d2
  193.     or.l    d2,d1
  194.     and.l    d5,d1
  195.  
  196. ;    00004321000043210000432100004321
  197. ;    43210000432100004321000043210000
  198. ;    43214321432143214321432143214321
  199. ;    00100010001000100010001000100010 -> d1
  200. ;      12   8  13   9  14  10  15  11
  201.  
  202.     or.l    d1,d0
  203.  
  204. ;    00110011001100110011001100110011 -> d0
  205.  
  206.     move.l    a4,d1
  207.     move.l    d4,d2
  208.     lsl.l    #4,d2
  209.     or.l    d2,d1
  210.     and.l    d5,d1
  211.     lsr.l    #1,d1
  212.  
  213. ;    00004321000043210000432100004321
  214. ;    43210000432100004321000043210000
  215. ;    43214321432143214321432143214321
  216. ;    00010001000100010001000100010001 -> d1
  217. ;      20  16  21  17  22  18  23  19
  218.  
  219.     move.l    a6,d3
  220.     move.l    a7,d2
  221.     lsl.l    #4,d2
  222.     or.l    d2,d3
  223.     and.l    d5,d3
  224.  
  225. ;    00004321000043210000432100004321
  226. ;    43210000432100004321000043210000
  227. ;    43214321432143214321432143214321
  228. ;    00100010001000100010001000100010 -> d3
  229. ;      28  24  29  25  30  26  31  27
  230.  
  231.     or.l    d3,d1
  232.  
  233. ;    00110011001100110011001100110011 -> d1
  234.  
  235.     lsl.l    #4,d1
  236.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  237.  
  238. ;    11111111111111111111111111111111 -> d0
  239.  
  240. ;    lea    10240(a6),a6
  241.     move.l    d0,20480(a6)            ;Pintamos 32 pixels de golpe en el Plano 3
  242.  
  243. ************************************
  244. **** Plano 4 ***********************
  245. ************************************
  246.  
  247.     lsl.l    #1,d5            ;Mascara para el plano 4
  248.  
  249.     move.l    a0,d0
  250.     move.l    a1,d2
  251.     lsl.l    #4,d2
  252.     or.l    d2,d0
  253.     and.l    d5,d0
  254.     lsr.l    #1,d0
  255.  
  256. ;    00004321000043210000432100004321
  257. ;    43210000432100004321000043210000
  258. ;    43214321432143214321432143214321
  259. ;    00010001000100010001000100010001 -> d0
  260. ;       4   0   5   1   6   2   7   3
  261.  
  262.     move.l    a2,d1
  263.     move.l    a3,d2
  264.     lsl.l    #4,d2
  265.     or.l    d2,d1
  266.     and.l    d5,d1
  267.  
  268. ;    00004321000043210000432100004321
  269. ;    43210000432100004321000043210000
  270. ;    43214321432143214321432143214321
  271. ;    00100010001000100010001000100010 -> d1
  272. ;      12   8  13   9  14  10  15  11
  273.  
  274.     or.l    d1,d0
  275.  
  276. ;    00110011001100110011001100110011 -> d0
  277.  
  278.     move.l    a4,d1
  279.     move.l    d4,d2
  280.     lsl.l    #4,d2
  281.     or.l    d2,d1
  282.     and.l    d5,d1
  283.     lsr.l    #1,d1
  284.  
  285. ;    00004321000043210000432100004321
  286. ;    43210000432100004321000043210000
  287. ;    43214321432143214321432143214321
  288. ;    00010001000100010001000100010001 -> d1
  289. ;      20  16  21  17  22  18  23  19
  290.  
  291.     move.l    a6,d3
  292.     move.l    a7,d2
  293.     lsl.l    #4,d2
  294.     or.l    d2,d3
  295.     and.l    d5,d3
  296.  
  297. ;    00004321000043210000432100004321
  298. ;    43210000432100004321000043210000
  299. ;    43214321432143214321432143214321
  300. ;    00100010001000100010001000100010 -> d3
  301. ;      28  24  29  25  30  26  31  27
  302.  
  303.     or.l    d3,d1
  304.  
  305. ;    00110011001100110011001100110011 -> d1
  306.  
  307.     lsl.l    #4,d1
  308.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  309.  
  310. ;    11111111111111111111111111111111 -> d0
  311.  
  312. ;    lea    10240(a6),a6
  313.     move.l    d0,30720(a6)            ;Pintamos 32 pixels de golpe en el Plano 1
  314.     addq.l    #4,a6
  315. ;    lea    (-10240*3)+2(a6),a6    
  316.     
  317.     move.w    (sp)+,d0
  318.     dbra    d0,.loop
  319.     rts
  320.  
  321.  
  322. ;--------------------------------------------------------------------------------
  323. ;Calculo de tiempos en el cache:
  324. ;--------------------------------------------------------------------------------
  325. ;
  326. ;    1 MOVEq para mascara    = 1 * 2 =  2 ciclos
  327. ;    8 MOVEs ()+,Rn        = 8 * 5 = 40 ciclos
  328. ;    8 MOVEs Rn,Dn        = 8 * 2 = 16 ciclos
  329. ;    4 ANDs    entre registros    = 4 * 2 =  8 ciclos
  330. ;    7 LS?s            = 7 * 4 = 28 ciclos
  331. ;    7 ORs    entre registros    = 7 * 2 = 14 ciclos
  332. ;    1 MOVE    Dn,()        =       =  3 ciclos
  333. ;                     ----
  334. ;                     111 ciclos
  335. ;A partir del segundo plano:
  336. ;
  337. ;    1 LSL #1,D5        = 1 * 4 =  4 ciclos    
  338. ;    8 MOVEs Rn,Dn        = 8 * 2 = 16 ciclos
  339. ;    4 ANDs    entre registros    = 4 * 2 =  8 ciclos
  340. ;    7 LS?s            = 7 * 4 = 28 ciclos
  341. ;    7 ORs    entre registros    = 7 * 2 = 14 ciclos
  342. ;    1 MOVE    Dn,d16()    = 1 * 4 =  3 ciclos
  343. ;       1 ADDQ            = 1 * 2 =  2 ciclos
  344. ;    dbra            = 1 * 6 =  6
  345. ;                     ----
  346. ;                      79 ciclos
  347. ;
  348. ;+---------------------------------------------------------------+
  349. ;| 1x1 16 colores  = (111 + 79 * 3) / 32 = 10.8   ciclos / pixel |
  350. ;+---------------------------------------------------------------+
  351.